import { defineConfig, loadEnv, ConfigEnv, UserConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import { resolve } from "path";
import { visualizer } from "rollup-plugin-visualizer";
import viteCompression from "vite-plugin-compression";

// https://vite.dev/config/
export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
	const isBuild = mode == "production";
	const env = loadEnv(mode, process.cwd());
	console.log(env.VITE_APP_BASE);
	return {
		plugins: [
			vue(),
			// 打包分析
			visualizer({
				open: true, // 构建完成后自动打开分析报告
				filename: "stats.html", // 生成的分析报告文件名
				gzipSize: true, // 收集 gzip 大小并显示
				brotliSize: true, // 收集 brotli 大小并显示
			}),
			// 开启gzip压缩
			viteCompression({
				verbose: true,
				disable: false,
				threshold: 10240,
				algorithm: "gzip",
				ext: ".gz",
			}),
		],
		base: "./",
		// base: env.VITE_APP_BASE,
		resolve: {
			// 配置别名路径
			alias: {
				"@": resolve(__dirname, "./src"),
			},
		},
		build: {
			outDir: "dist", // 打包后的文件名
			target: "es2015", // 支持es2015，兼容低版本浏览器
			minify: "esbuild",
			chunkSizeWarningLimit: 1500, // 指定代码块大小警告的限制
			rollupOptions: {
				output: {
					// 最小化拆包
					manualChunks(id: string) {
						if (isBuild && id.includes("node_modules")) {
							return id
								.toString()
								.split("node_modules/")[1]
								.split("/")[0]
								.toString();
						}
					},
					chunkFileNames: "assets/js/[name]-[hash].js",
					entryFileNames: "assets/js/[name]-[hash].js",
					assetFileNames: "assets/[ext]/[name]-[hash].[ext]",
				},
			},
		},
		esbuild: {
			drop: isBuild ? ["console", "debugger"] : [], // 打包去除console.log、debugger
		},
		server: {
			// host: "0,0,0,0", // 指定服务器IP地址
			port: 8080, // 服务端口号
			open: true, // 启动时自动打开浏览器
			cors: true, // 开启跨域
			hmr: true, // 开启热更新
			proxy: {
				// 跨域代理配置
				"/api": {
					target: "",
					changeOrigin: true,
					secure: false,
					// rewrite: path => path.replace(/^/api/, "")
				},
			},
		},
	};
});
